import torch

a = torch.tensor([5.0], requires_grad=True)
print(a)

with torch.no_grad():
    a.fill_(1.0)  # 修改 a 的值为 1

print(a)  # ✅ 外部依然是 tensor([1.])

a = torch.tensor([5.0])
print(a)

with torch.no_grad():
    a = torch.tensor([1.0])  # 这是重新创建一个新张量（新对象）

print(a)  # ❌ 这是外层变量被重新绑定为新对象 tensor([1.])

# 在 Python 中，with 是一种上下文管理器语法：
# 它控制“执行环境”（比如是否追踪梯度）；
# 但不会像函数 def 或类 class 那样创建新的变量作用域。
with torch.no_grad():
    b = torch.tensor([1.0])
print(b)
